#pragma once
#include <string>
namespace mq_zxws
{
#define DBG_LEVEL 0
#define INF_LEVEL 1
#define ERR_LEVEL 2
#define DEFUALT_LEVEL DBG_LEVEL
// 下面的 if内部 之所以被括起来，是因为如果传递的参数和 其中的变量 同名，那么根据局部优先的原则，会打印LOG内的 变量，而不是传入的参数！！！
#define LOG(level_str, level, format, ...) {\
        if (level >= DEFUALT_LEVEL){\
            {\
                time_t t = time(nullptr);\
                struct tm *ptm = localtime(&t);\
                char buf[32];\
                strftime(buf, 32, "%H:%M:%S", ptm);\
                printf("[%s][%s][%s:%d] ", level_str, buf, __FILE__, __LINE__);\
            }\
            printf(format "\n", ##__VA_ARGS__);\
        }\
    }

#define DLOG(format, ...) LOG("DEG", DBG_LEVEL, format, ##__VA_ARGS__)
#define ILOG(format, ...) LOG("INF", INF_LEVEL, format, ##__VA_ARGS__)
#define ELOG(format, ...) LOG("ERR", ERR_LEVEL, format, ##__VA_ARGS__)
}